#include <bits/stdc++.h>
using namespace std;
int g[150][150];
bool vis[150][150];
int n, m;
int tot;
int tmp;
int ans[30000];
int dirx[4]={0, 1, 0, -1};
int diry[4]={1, 0, -1, 0};
void dfs(int x, int y)
{
	vis[x][y]=true;
	tmp++;
	for(int i=0;i<4;i++)
	{
		int tx=x+dirx[i];
		int ty=y+diry[i];
		if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&!vis[tx][ty]&&!g[tx][ty])dfs(tx, ty);
	}
}
int main()
{
	int t;
	scanf("%d", &t);
	for(int tt=1;tt<=t;tt++)
	{
		memset(vis, false, sizeof(vis));
		memset(g, 0, sizeof(g));
		int k;
		scanf("%d%d%d", &n, &m, &k);
		for(int i=1;i<=k;i++)
		{
			int x, y;
			scanf("%d%d", &x, &y);
			g[x][y]++;
		}
		printf("Case #%d:\n", tt);
		tot=0;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++){
				if(!vis[i][j]&&!g[i][j]){
					tmp=0;
					dfs(i, j);
					ans[++tot]=tmp;
				}
			}
		sort(ans+1, ans+1+tot);
		printf("%d\n", tot);
		for(int i=1;i<=tot;i++)printf("%d%c", ans[i], i==tot?'\n':' ');
	}
}

